package org.zlw.core.context;
import io.netty.channel.ChannelHandlerContext;

import java.util.function.Consumer;
//import io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue;

public interface IContext {
    /**
     * 网关上下文生命周期，运行中状态
     *
     */
    int Runing  = 1;
    /**
     * 标识运行过程中发生错误，对其进行标识
     * 告诉我们请求已经结束，需要返回客服端
     */
    int Written =0;
    /**
     *写回成功需要进行标记 ,防止并发情况下的多次写回
     */
    int Completed =1;
    /**
     * 表示网请求结束
     */
    int Terminated = 2;

    //网关流转

    /**
     * 设置上下文状态为运行中
     */
    void runned();
    /**
     * 设置上下文状态为标记写回
     */
    void writtened();
    /**
     * 设置上下文状态为标记写回成功
     */
    void completed();
    /**
     * 设置上下文状态为标记请求结束
     */
    void terminated();
    /**
     * 判断网关状态
     */
    boolean isRunning();
    boolean iswrittened();
    boolean iscompleted();
    boolean isterminated();
    /**
     * 获取协议
     * @return
     */
    String getProtovol();
    /**
     *获取请求对象
     * @return
     */
    Object getRequset();
    /**
     *获取返回对象
     * @return
     */
    Object getResponse();
    /**
     *设置返回对象
     * @return
     */
    void setResponse(Object response);
    /**
     *获取异常对象
     * @return
     */
   Throwable getThrowable();
    /**
     *设置异常对象
     * @return
     */
    void setThrowable(Throwable throwable);

    /**
     * 3星
     *    获取Netty上下文
     */

    ChannelHandlerContext getNettyCtx();

    /**
     *  是否保持连接
     *  是否是长连接
     */

    boolean isKeepAlive();
/**
 * 释放请求资源
 */
boolean releaseRequest();
    /**
     * 异步
     * 设置写回接收回调函数
     */
void setCompletedCallBack(Consumer<IContext> consumer);
    /**
     * 执行写回接收回调函数
     */
    void invokeCompletedCallBack(Consumer<IContext> consumer);




}
